package cn.xl.xxl.tools;



import android.content.Context;
import android.content.res.AssetManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Environment;
import android.text.Html;
import android.text.Spanned;
import android.text.TextUtils;
import android.view.Display;
import android.view.WindowManager;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.regex.Pattern;

public class CommonUtil {

	private static final CommonLog log = LogFactory.createLog();
	
	public static boolean hasSDCard() {
		String status = Environment.getExternalStorageState();
		if (!status.equals(Environment.MEDIA_MOUNTED)) {
			return false;
		} 
		return true;
	}
	
	public static String getRootFilePath() {
		if (hasSDCard()) {
			return Environment.getExternalStorageDirectory().getAbsolutePath() + "/";// filePath:/sdcard/
		} else {
			return Environment.getDataDirectory().getAbsolutePath() + "/data/"; // filePath: /data/data/
		}
	}
	
	
	public static boolean checkNetState(Context context){
    	boolean netstate = false;
		ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
		if(connectivity != null)
		{
			NetworkInfo[] info = connectivity.getAllNetworkInfo();
			if (info != null) {
				for (int i = 0; i < info.length; i++)
				{
					if (info[i].getState() == NetworkInfo.State.CONNECTED) 
					{
						netstate = true;
						break;
					}
				}
			}
		}
		return netstate;
    }
	
	public static void showToask(Context context, String tip){
		Toast.makeText(context, tip, Toast.LENGTH_SHORT).show();
	}

	public static int getScreenWidth(Context context) {
		WindowManager manager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
		Display display = manager.getDefaultDisplay();
		return display.getWidth();
	}
	
	public static int getScreenHeight(Context context) {
		WindowManager manager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
		Display display = manager.getDefaultDisplay();
		return display.getHeight();
	}



	/**
	 * 判断字符串的长度
	 *
	 * @param str
	 * @param length
	 * @return
	 */
	public static boolean isMatchLegth(String str, int length) {
		if (TextUtils.isEmpty(str)) {
			return false;
		} else {
			return str.length() == length;
		}
	}

	/**
	 * 移动：134、135、136、137、138、139、150、151、152、157(TD)、158、159、178、182、183、184、187、188
	 * 联通：130、131、132、155、156、176、185、186
	 * 电信：133、153、177、180、189、（1349卫通）
	 * 前3位是网络识别号、4-7位是地区编码(HLR归属位置寄存器)、8-11位是用户号码(随机分配)。
	 *
	 * @param str
	 * @return
	 */
	public static boolean isPhoneNo(String str) {
		String regex = "[1][34578]\\d{9}";
		return isMatchLegth(str, 11) && str.matches(regex);
	}

	/**
	 * 邮箱
	 *
	 * @param str
	 * @return
	 */
	public static boolean isEmail(String str) {
		String regex = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
		return Pattern.matches(regex, str);
	}

	@SuppressWarnings("deprecation")
	public static Spanned fromHtml(String html) {
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
			return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
		} else {
			return Html.fromHtml(html);
		}
	}

	/**
	 * 获取assets里面文件信息
	 *
	 * @param context
	 * @param fileName
	 * @return
	 */
	public static String getJsonFromAssets(Context context, String fileName) {

		StringBuilder stringBuilder = new StringBuilder();
		try {
			AssetManager assetManager = context.getResources().getAssets();
			BufferedReader bf = new BufferedReader(new InputStreamReader(
					assetManager.open(fileName)));
			String line;
			while ((line = bf.readLine()) != null) {
				stringBuilder.append(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return stringBuilder.toString();
	}

	/**
	 * 保留两位小数,不进行四舍五入
	 *
	 * @return
	 */
	public static DecimalFormat twoDecimalFloor() {
		DecimalFormat ddf = new DecimalFormat("0.00");
		ddf.setMaximumFractionDigits(2);
		ddf.setGroupingSize(0);
		ddf.setRoundingMode(RoundingMode.FLOOR);
		return ddf;
	}
}
